% 编程实现对" lina.bmp "图像的频域处理，然后在其中心平移后的频谱图像中截取出中心120x120区域，
% 进行反变换，在一个窗口下显示原图、中心平移频谱图、截取区域图和其反变换效果图；

close all; clear; clc;
img = imread('lina.bmp');% 读取图像
img = im2double(img); % 确保图像数据在0到1之间,方便对数变换
img_fft = fft2(img);% 进行二维FFT变换
Pinpu = log(1 + img_fft); % 加1 - 避免对数中的0值
Pinpu_shifted = fftshift(Pinpu);    % 中心平移频谱图像
% 截取中心120x120区域
length = 120;   %120*120
[m, n] = size(Pinpu_shifted);
hang_start = n/2 - length/2;    %128-60
hang_end   = n/2 + length/2-1;
lie_start  = m/2 - length/2;
lie_end    = m/2 + length/2-1;

cropped = Pinpu_shifted(hang_start:hang_end, lie_start:lie_end);

ifft2_img = ifft2(cropped);
Ifft2_IMG_END = uint8(abs(ifft2_img));

subplot(2, 2, 1); imshow(img); title('Original Image');% 显示原始图像
subplot(2, 2, 2);imshow(Pinpu_shifted, []);title('中心平移后的频谱');
subplot(2, 2, 3);imshow(cropped, []);title('频谱图像中心120×120区域');
subplot(2, 2, 4);imshow(Ifft2_IMG_END, []);title('反变换效果图');

%%
close all; clear; clc;
I=imread('lina.bmp');
F=fft2(I);
Fc=fftshift(F);
[r,c]=size(Fc);
Fc1=Fc(floor(r/2-59:r/2+60),floor(c/2-59:c/2+60));
%在中心平移后频谱图中截取中心120*120区域
iFc1=ifft2(Fc1); %反变换效果图
subplot(2,2,1);imshow(I);title('原图像'); 
subplot(2,2,2);imshow(Fc,[]);title('中心平移频谱图'); 
subplot(2,2,3);imshow(Fc1,[]);title('截取区域图');
subplot(2,2,4);imshow(abs(iFc1),[]);title('反变换效果图');































